package com.mm.cloud.lease.controller;

import com.mm.cloud.common.core.result.Result;
import com.mm.cloud.lease.dto.room.form.BatchSaveRoomDTO;
import com.mm.cloud.lease.dto.room.form.DeleteRoomDTO;
import com.mm.cloud.lease.dto.room.form.SaveRoomDTO;
import com.mm.cloud.lease.dto.room.form.UpdateRoomDTO;
import com.mm.cloud.lease.dto.room.query.QueryRoomDTO;
import com.mm.cloud.lease.service.IRoomService;
import com.mm.cloud.lease.vo.room.RoomPageVO;
import com.mm.cloud.lease.vo.room.RoomVO;
import lombok.AllArgsConstructor;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * <p>
 * 房间 前端控制器
 * </p>
 *
 * @author mr
 * @since 2025-07-01
 */
/**
 * 房间 前端控制器
 * 提供房间的新增、修改、删除、批量新增、查询等接口
 */
@RestController
@AllArgsConstructor
@RequestMapping("/room")
public class RoomController {

    private final IRoomService roomService;

    /**
     * 新增房间
     *
     * @param dto 房间新增参数
     * @return 新增房间主键ID
     */
    @PostMapping
    public Result<Long> saveRoom(@RequestBody SaveRoomDTO dto) {
        return roomService.saveRoom(dto);
    }

    /**
     * 修改房间
     *
     * @param dto 房间修改参数
     * @return 操作结果
     */
    @PutMapping
    public Result<String> updateRoom(@RequestBody UpdateRoomDTO dto) {
        return roomService.updateRoom(dto);
    }

    /**
     * 删除房间
     *
     * @param dto 删除参数
     * @return 操作结果
     */
    @DeleteMapping
    public Result<String> deleteRoom(DeleteRoomDTO dto) {
        return roomService.deleteRoom(dto);
    }

    /**
     * 批量新增房间
     *
     * @param dto 批量新增参数
     * @return 操作结果
     */
    @PostMapping("/batch")
    public Result<String> batchSaveRoom(@RequestBody BatchSaveRoomDTO dto) {
        return roomService.batchSaveRoom(dto);
    }

    /**
     * 获取房间详情
     *
     * @param id 房间ID
     * @return 房间详情
     */
    @GetMapping("/{id}")
    public Result<RoomVO> getRoom(@PathVariable("id") Long id) {
        return roomService.getRoom(id);
    }

    /**
     * 获取房间分页列表
     *
     * @param dto 查询条件
     * @return 房间列表及总数
     */
    @GetMapping
    public Result<List<RoomPageVO>> getRoomList(QueryRoomDTO dto) {
        return roomService.getRoomList(dto);
    }

    /**
     * 校验房间是否可租（供前端快速校验）
     *
     * @param id 房间ID
     * @return 成功即可租，失败返回原因
     */
    @GetMapping("/check-rentable/{id}")
    public Result<String> checkRoomRentable(@PathVariable("id") Long id) {
        return roomService.checkRoomRentable(id);
    }

}
